/**
 * @file config.h
 * @brief ini配置文件解析，并提供接口
 * @author ypj
 * @date 2022年10月27日
 * @license MIT Apache2.0
 * Copyright (C), 2010-2022 Jouav Co., Ltd.
 */

#pragma once
#include <string>
//#include "base/base.h"
#include <map>

namespace jouav
{
/**
* @brief Config 给sys_monitor提供配置解析
* 提供各个配置文件解析数据的接口
*/
class Config {
private:
	Config();
public:
	virtual ~Config() {}

	static Config& GetInstance();
	/**
	* @brief 解析sys_monitor.ini配置文件
	* @param[in] config_path 配置文件路径
	* @return int-0 成功；-1-解析配置文件失败
	*/
	int Init(const std::string&config_path = "");

public:

	/**
	* @brief 查询日志存放路径
	* @return 返回配置文件中所配置的路径
	*/
	std::string& GetLogPath() { return m_log_path_; }

	/**
	* @brief 查询飞控SN
	* @return sn
	*/
	std::string& GetSN() { return m_dev_sn_; }

	/**
	 * @brief 获取mqtt服务器ip
	 * @return ip
	 */
	const std::string& GetMqttIp() { return m_mqtt_ip_; }

    /**
     * @brief 获取串口服务器TCP服务PORT
     * @return port
     */
    const int& GetMqttPort() { return mqtt_port_; }

    /**
     * @brief 获取mqtt账号
     * @return 账号
     */
    const std::string& GetMqttName() { return m_name_; }

	/**
	 * @brief 获取mqtt key
	 * @return key
	 */
	const std::string& GetMqttKey() { return m_key_; }

	/**
	 * @brief 获取mqtt id
	 * @return id
	 */
	const std::string& GetMqttId() { return m_cli_id; }

	/**
	 * @brief 获取mqtt 发布topic
	 * @return topic
	 */
	const std::string& GetMqttPubTopic() { return m_pub_topic_; }

	/**
	 * @brief 获取mqtt 订阅topic
	 * @return topic
	 */
	const std::string& GetMqttSubTopic() { return m_sub_topic_; }

	/**
	 * @brief 获取mqtt QOS
	 * @return QOS 0 1 2
	 */
	const int& GetMqttQos() { return qos_; }

	/**
	 * @brief 获取串口服务器TCP服务PORT
	 * @return IP
	 */
	const uint16_t& GetTcpServerPort() { return tcp_port_; }

	/**
	 * @brief 获取串口服务器UDP服务port
	 * @return port
	 */
	const uint16_t& GetUdpServerPort() { return udp_port_; }
private:
	/**
	 * @brief 根据SN推到出PORT
	 * @return port
	 */
	uint16_t GetPortBySN();

private:
	int ParseIni();
	int ParseJson();
	int ReadJsonFile();

private:
	std::string m_log_path_;

	std::string m_dev_sn_;

	std::string m_mqtt_ip_ = "127.0.0.1";

	std::string m_sub_topic_ = "/msg/pilot/out";

	std::string m_pub_topic_ = "/msg/pilot/in";

	std::string m_name_ = "";
	
	std::string m_key_ = "";

	std::string m_cli_id = "";

	int mqtt_port_ = 1883;

    int qos_ = 0;

	uint16_t tcp_port_ = 2010;

	uint16_t udp_port_ = 2011;

	std::string pilot_sn_ = ""; //飞控SN

	std::string cnfig_file_ = ""; //包含路径和名称

};

}
